import { codeStatus } from "@/Enum";
/** 返回结果信息及状态码 */
declare type CodeStatus = keyof typeof codeStatus;

interface BoolOption {
   data?: any;
   msg?: CodeStatus;
}

/** 返回结果格式化 */
export class Result {
   static #result = (msg?: CodeStatus, data?: any) => {
      return {
         /** 数据内容 */
         data: data || null,
         /** 状态码 */
         code: msg ? codeStatus[msg] : 200,
         /** 返回信息 */
         msg: msg || "ok"
      };
   };

   // TODO 格式化返回结果
   /**
    * @static
    * @function 请求成功
    */
   static OK(data?: any) {
      return this.#result("ok", data);
   }

   /**
    * @static
    * @function 服务器错误
    */
   static Error(msg?: CodeStatus) {
      if (msg) return this.#result(msg, null);
      return this.#result("error");
   }

   /**
    * @param bool 状态
    * @param option 结果设置
    * @description
    * 根据结果状态返回数据;
    * 状态为 true 默认返回成功并包含数据;
    * 状态为 false 默认返回失败并包含错误信息;
    */
   static Bool(bool: boolean, option?: BoolOption) {
      if (bool) {
         return this.OK(option?.data);
      } else {
         return this.Error(option?.msg);
      }
   }
}
